package com.guigu.ssyx.product.service.impl;

import com.atguigu.ssyx.vo.product.SkuInfoQueryVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.guigu.constant.MqConst;
import com.guigu.service.RabbitService;
import com.guigu.ssyx.product.entity.SkuAttrValue;
import com.guigu.ssyx.product.entity.SkuImage;
import com.guigu.ssyx.product.entity.SkuInfo;
import com.guigu.ssyx.product.entity.SkuPoster;
import com.guigu.ssyx.product.entity.vo.SkuInfoVo;
import com.guigu.ssyx.product.mapper.SkuInfoMapper;
import com.guigu.ssyx.product.service.SkuAttrValueService;
import com.guigu.ssyx.product.service.SkuImageService;
import com.guigu.ssyx.product.service.SkuInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.guigu.ssyx.product.service.SkuPosterService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * <p>
 * sku信息 服务实现类
 * </p>
 *
 * @author liuyang
 * @since 2025-09-10
 */
@Service
public class SkuInfoServiceImpl extends ServiceImpl<SkuInfoMapper, SkuInfo> implements SkuInfoService {

    @Autowired
    private SkuInfoService skuInfoService;

    @Autowired
    private SkuPosterService skuPosterService;

    @Autowired
    private SkuImageService skuImageService;

    @Autowired
    private SkuAttrValueService skuAttrValueService;

    @Autowired
    private RabbitService rabbitService;




    /**
     *  * @param skuInfoPage
     *  * @param skuInfoQueryVo
     *    分页查询
     * */
    @Override
    public IPage<SkuInfo> selectPage(Page<SkuInfo> skuInfoPage, SkuInfoQueryVo skuInfoQueryVo) {
        String keyword = skuInfoQueryVo.getKeyword();
        String skuType = skuInfoQueryVo.getSkuType();
        Long categoryId = skuInfoQueryVo.getCategoryId();
        LambdaQueryWrapper<SkuInfo> skuInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
        if(!StringUtils.isEmpty(keyword)){
            skuInfoLambdaQueryWrapper.like(SkuInfo::getSkuName,keyword);
        }

        if(!StringUtils.isEmpty(skuType)){
            skuInfoLambdaQueryWrapper.eq(SkuInfo::getSkuType,skuType);
        }

        if(!StringUtils.isEmpty(categoryId)){
            skuInfoLambdaQueryWrapper.eq(SkuInfo::getCategoryId,categoryId);
        }

        Page<SkuInfo> skuInfoPage1 = baseMapper.selectPage(skuInfoPage, skuInfoLambdaQueryWrapper);


        return skuInfoPage1;
    }

    /**
     *  * @param skuInfoVo
     *  * 保存sku信息
     * */
    @Override
    public void saveSkuInfo(SkuInfoVo skuInfoVo) {
        //保存sku基本信息
        SkuInfo skuInfo = new SkuInfo();
        BeanUtils.copyProperties(skuInfoVo, skuInfo);

        skuInfoService.save(skuInfo);

        //保存sku海报
        List<com.guigu.ssyx.product.entity.SkuPoster> skuPosterList = skuInfoVo.getSkuPosterList();

        if (!CollectionUtils.isEmpty(skuPosterList)) {
            int sort = 1;
            for (SkuPoster skuPoster : skuPosterList) {
                skuPoster.setSkuId(skuInfo.getId());
                sort++;
            }
            skuPosterService.saveBatch(skuPosterList);
        }

        //保存sku图片
        List<SkuImage> skuImagesList = skuInfoVo.getSkuImagesList();
        if (!CollectionUtils.isEmpty(skuImagesList)) {
            int sort = 1;
            for (SkuImage skuImage : skuImagesList) {
                skuImage.setSkuId(skuInfo.getId());
                skuImage.setSort(sort);
                sort++;
            }
            skuImageService.saveBatch(skuImagesList);

        }

        //保存属性
        List<SkuAttrValue> skuAttrValueList = skuInfoVo.getSkuAttrValueList();
        if (!CollectionUtils.isEmpty(skuAttrValueList)) {
            int sort = 1;
            for (SkuAttrValue skuAttrValue : skuAttrValueList) {
                skuAttrValue.setSkuId(skuInfo.getId());
                skuAttrValue.setSort(sort);
                sort++;
            }
            skuAttrValueService.saveBatch(skuAttrValueList);
        }

    }

    /**
     *  * @param id
     *  * 根据id获取sku信息
     * */
    @Override
    public SkuInfoVo getSkuVoInfo(Long id) {
        SkuInfoVo skuInfoVo = new SkuInfoVo();
        //获取sku基本信息
        SkuInfo skuInfo = skuInfoService.getById(id);
        List<SkuPoster> skuPosterList = skuPosterService.getPosterListBySkuId(id);
        List<SkuImage> skuImagesList = skuImageService.getImageListBySkuId(id);
        List<SkuAttrValue> skuAttrValueList = skuAttrValueService.getAttrValueListBySkuId(id);

        if(skuInfo != null){
            BeanUtils.copyProperties(skuInfo, skuInfoVo);
            skuInfoVo.setSkuPosterList(skuPosterList);
            skuInfoVo.setSkuImagesList(skuImagesList);
            skuInfoVo.setSkuAttrValueList(skuAttrValueList);
            return skuInfoVo;
        }

        return null;
    }

    @Override
    public void updateSkuInfo(SkuInfoVo skuInfoVo) {
        Long id = skuInfoVo.getId();
        //更新sku的基本信息
        this.updateById(skuInfoVo);

        //输出队形的sku海报
        LambdaQueryWrapper<SkuPoster> skuPosterLambdaQueryWrapper = new LambdaQueryWrapper<>();
        skuPosterLambdaQueryWrapper.eq(SkuPoster::getSkuId, id);
        skuPosterService.remove(skuPosterLambdaQueryWrapper);

        //保存sku海报
        List<SkuPoster> skuPosterList = skuInfoVo.getSkuPosterList();
        if(!CollectionUtils.isEmpty(skuPosterList)){
            for (SkuPoster skuPoster : skuPosterList) {
                skuPoster.setSkuId(id);
            }
            skuPosterService.saveBatch(skuPosterList);
        }

        //删除图片
        LambdaQueryWrapper<SkuImage> skuImageLambdaQueryWrapper = new LambdaQueryWrapper<>();
        skuImageLambdaQueryWrapper.eq(SkuImage::getSkuId, id);
        skuImageService.remove(skuImageLambdaQueryWrapper);
        //保存sku图片
        List<SkuImage> skuImagesList = skuInfoVo.getSkuImagesList();
        if(!CollectionUtils.isEmpty(skuImagesList)){
            int sort = 1;
            for (SkuImage skuImage : skuImagesList) {
                skuImage.setSkuId(id);
                skuImage.setSort(sort);
                sort++;
            }
            skuImageService.saveBatch(skuImagesList);
        }

        //删除属性
        LambdaQueryWrapper<SkuAttrValue> skuAttrValueLambdaQueryWrapper = new LambdaQueryWrapper<>();
        skuAttrValueLambdaQueryWrapper.eq(SkuAttrValue::getSkuId, id);
        skuAttrValueService.remove(skuAttrValueLambdaQueryWrapper);
        //保存属性
        List<SkuAttrValue> skuAttrValueList = skuInfoVo.getSkuAttrValueList();
        if(!CollectionUtils.isEmpty(skuAttrValueList)){
            int sort = 1;
            for (SkuAttrValue skuAttrValue : skuAttrValueList) {
                skuAttrValue.setSkuId(id);
                skuAttrValue.setSort(sort);
                sort++;
            }
            skuAttrValueService.saveBatch(skuAttrValueList);
        }

    }

    @Override
    public void publish(Long skuId, Integer status) {
        if(status == 1){
            SkuInfo skuInfo = new SkuInfo();
            skuInfo.setId(skuId);
            skuInfo.setPublishStatus(1);
            baseMapper.updateById(skuInfo);

            //TODO 上架后商品可以被检索到,后续会完善，发送mq消息更新es数据
            rabbitService.sendMessage(MqConst.EXCHANGE_GOODS_DIRECT,MqConst.ROUTING_GOODS_UPPER , skuId);

        }else if(status == 0){
            SkuInfo skuInfo = new SkuInfo();
            skuInfo.setId(skuId);
            skuInfo.setPublishStatus(0);
            baseMapper.updateById(skuInfo);


            //TODO 下架后商品不可以被检索到,后续会完善，发送mq消息更新es数据
            rabbitService.sendMessage(MqConst.EXCHANGE_GOODS_DIRECT,MqConst.ROUTING_GOODS_LOWER,skuId);
        }
    }

}
